1964 年,Dartmouth College 的 John Kemeny 和 Thomas Kurtz 发明了 BASIC—— Beginner's All-purpose Symbolic Instruction Code(初学者的通用符号指令代码)。 它简单、易学,让一代人 “爱上了编程”。
然后,BASIC 被 “背叛” 了。微软搞出了 Visual Basic, 后来又搞出了 VB.NET——一个披着 BASIC 外衣的 “.NET 语言”。 这不是 BASIC,这是 “伪 BASIC”。
今天,我们要 “真正地” 复活 BASIC。不是 .NET 那套,不是“可视化”那套, 是 “真正的” BASIC——但给它加上 “现代” 的包装。 我们推出了 BASIC.Modern——一门 “新” 语言。 它保留了 BASIC 的 “灵魂”(行号、GOTO、LET、PRINT), 同时加入了 “现代” 的特性(lambda、类、模块、类型推断、异步 I/O)。
GOTO 不是罪恶,它是 ‘自由’。行号 不是过时,它是 ‘历史’。LET 不是啰嗦,它是 ‘身份’。我们保留了 BASIC 的 “核心元素”:
GOTO — 回归了!不道歉,不解释。LET — 现在支持类型推断:LET x = 42 自动推导为 int。PRINT — 增强版,支持格式化输出、流式写入。INPUT — 读取用户输入,支持类型校验。DIM — 数组声明,现在支持动态大小、多维数组。但我们加入了 “现代” 的“肉”:
CLASS、METHOD、INHERIT。FUNCTION、LAMBDA、MAP、FILTER。IMPORT、EXPORT。ASYNC、AWAIT。TRY、CATCH、FINALLY(但保留 ON ERROR)。
// BASIC.Modern 的 Hello World
PRINT "Hello, World!"
// 没错,还是那么简单
// 经典 LET,但现代
LET x = 42 // 自动推导为 int
LET name = "Alice" // 自动推导为 string
LET pi = 3.14159 // 自动推导为 float
// 你也可以显式指定类型
LET n: INT = 10
LET s: STRING = "Hello"
// 函数
FUNCTION add(a: INT, b: INT): INT
RETURN a + b
END FUNCTION
// Lambda 表达式
LET square = LAMBDA(x) => x * x
PRINT square(5) // 25
// 高阶函数
LET numbers = [1, 2, 3, 4, 5]
LET doubled = MAP(numbers, LAMBDA(n) => n * 2)
PRINT doubled // [2, 4, 6, 8, 10]
// 类
CLASS Person
LET name: STRING
LET age: INT
METHOD constructor(n: STRING, a: INT)
LET name = n
LET age = a
END METHOD
METHOD greet()
PRINT "Hello, I'm " + name + ", " + age + " years old"
END METHOD
END CLASS
// 使用
LET p = NEW Person("Alice", 30)
CALL p.greet()
// GOTO 回来了!
LET i = 0
LABEL 10: // 行号作为标签
PRINT i
LET i = i + 1
IF i < 10 THEN GOTO 10
// 这叫“复古循环”——一种"新"的编程范式
// 异步读取文件
ASYNC FUNCTION readFile(filename: STRING): STRING
LET content = AWAIT File.read(filename)
RETURN content
END FUNCTION
// 使用
LET data = AWAIT readFile("data.txt")
PRINT data
PRINT 和 LET。你只是“怀旧”。FUNCTION 和 CLASS。你开始“现代”了。LAMBDA 和 MAP。你是一个 “函数式 BASIC 程序员”。ASYNC 和 AWAIT。你是一个 “现代 BASIC 开发者”。GOTO 和 行号 来写“复古代码”。你是一个 “复古现代主义者”。
但 BASIC.Modern 不是真实的东西——它只是一个 “思想实验”。
它问了一个问题:“如果我们把‘老派’风格和‘现代’功能结合起来会怎样?”
答案可能是:“会很有趣”,但也可能 “会是一场灾难”。
但无论如何,BASIC 值得被记住——它是 “编程的启蒙者”。
—— 一个用 BASIC 写过第一个程序的人